const WebSocket = require('ws');
const url = require('url');
// 创建 WebSocket 服务器，监听 3001 端口
const wss = new WebSocket.Server({ port: 3001 });
const userList = [];

// 监听客户端连接事件
wss.on('connection', function connection(ws, req) {
    let urlParse = url.parse(req.url);
    const id = urlParse.query.split('=')[1];
    const isRepeat = userList.find((item) => item.id === id);
    if (isRepeat) {
        ws.send('403 用户已存在');
        ws.close();
        return;
    }
    // 用户加入列表
    userList.push({ user: ws, id });

    console.log(`用户${id}已连接`);

    // 监听客户端发送的消息
    ws.on('message', function incoming(message) {
        const { to, content } = JSON.parse(message);
        console.log(to, content);

        if (to == -1) { // 发送给全部
            userList.forEach(item => {
                const data = JSON.stringify({ content, type: 'all', who: id });
                item.user.send(data);
            });
        } else {
            userList.forEach(item => {
                if (item.id == to) {
                    console.log('发送给', item.id);
                    const data = JSON.stringify({ content, type: 'one', who: id });
                    item.user.send(data);
                }
            });
        }
    });

    // 监听客户端断开连接事件
    ws.on('close', function close() {
     
        // 从用户列表中移除断开连接的用户
        const index = userList.findIndex(item => item.id == id);
        if (index!== -1) {
            userList.splice(index, 1);
               console.log(`客户端${id}已断开连接`);
        }
    });
});

console.log('WebSocket 服务器正在监听 3001 端口');